package com.zhala.system.service.impl;

import com.zhala.common.core.domain.BaseEntity;
import com.zhala.common.core.domain.entity.SysUser;
import com.zhala.common.core.domain.model.LoginUser;
import com.zhala.common.utils.DateUtils;
import com.zhala.common.utils.SecurityUtils;
import com.zhala.system.service.CommonService;
import org.springframework.stereotype.Service;

/**
 * @author SSH
 * @version 1.0
 * @description: TODO
 * @date 2024/11/11 22:04
 */
@Service
public class CommonServiceImpl implements CommonService {

    /**
     * 初始化实体类公共字段的方法
     * 主要用于设置创建者、创建时间和更新时间
     *
     * @param base 实体类基类对象，用于封装公共字段
     */
    @Override
    public void initPojo(BaseEntity base) {
        // 获取当前登录用户信息
        LoginUser loginUser = SecurityUtils.getLoginUser();
        // 如果登录用户存在，则设置创建者的昵名
        if (loginUser != null) {
            SysUser user = loginUser.getUser();
            base.setCreateBy(user != null ? user.getNickName() : "");
        }
        // 设置创建时间为当前系统日期
        base.setCreateTime(DateUtils.getNowDate());
        // 初始化更新时间为创建时间
        base.setUpdateTime(base.getCreateTime());
    }


    /**
     * 更新实体类公共字段的方法
     * 主要用于设置更新者、创建者、创建时间和更新时间
     *
     * @param base 实体类基类对象，用于封装公共字段
     */
    @Override
    public void updatePojo(BaseEntity base) {
        // 获取当前登录用户信息
        LoginUser loginUser = SecurityUtils.getLoginUser();
        // 如果登录用户存在，则设置更新者的昵名
        if (loginUser != null) {
            SysUser user = loginUser.getUser();
            base.setUpdateBy(user != null ? user.getNickName() : "");
        }
        base.setUpdateTime(DateUtils.getNowDate());
    }

    /**
     * 获取当前登录用户的昵称
     *
     * 此方法首先尝试获取当前登录的用户信息，如果获取成功且用户信息不为空，
     * 则进一步获取用户的昵称如果用户信息获取失败或用户对象为空，
     * 则返回空字符串表示未找到昵称
     *
     * @return 登录用户的昵称，如果未找到则返回空字符串
     */
    @Override
    public String getUserNickName() {
        // 尝试获取当前登录的用户信息
        LoginUser loginUser = SecurityUtils.getLoginUser();
        // 如果登录用户存在，则设置更新者的昵名
        if (loginUser != null) {
            // 获取登录用户的相关信息
            SysUser user = loginUser.getUser();
            // 返回用户的昵称，如果用户信息为空则返回空字符串
            return user != null ? user.getNickName() : "";
        }
        // 如果登录用户信息获取失败，则返回空字符串
        return "";
    }
}
